package java学习.第07章_面向对象编程_进阶;

public class G0_Object extends Object {
    /**
     * java.lang.Object 类是所有类的父类或间接父类
     * 即 任何一个类都直接或间接的继承与 Object 类
     *
     * 重点方法 ： equals()   比较对象是否相等   \  toString()
     * 获取此类的复制品
     * 了解方法：权限修饰符 protected     clone() \ finalize()
     * getClass()   获取当前对象的类型
     * hashCode()  算出一个对象的一个数，算出一个标识
     * notify()     //多线程锁的唤醒
     * notifyAll()
     * wait()         //多线程锁的等待
     * wait(long)
     * wait(long,int)
     */
    public static void main(String[] args) throws InterruptedException {

    }



    private static void finalize的使用() throws InterruptedException {
        Object o = new Object();
        G0_Object g = new G0_Object();
        g = null;
        System.gc();//释放资源

        Thread.sleep(1000);
        System.gc();//释放资源

        Thread.sleep(1000);
        System.out.println("结束");
    }


    public G0_Object() {
        super();
    }

    /**
     * 其他的类不能重写  是因为
     * final  //最终的  不能重写此方法
     * <p>
     * native //关键字  表示调用 c 的方法
     */

    @Override
    public int hashCode() {
        return super.hashCode();
    }

    /**
     * Object 中的 equals 是直接比较地址是否一样
     * 可以重写，自定义相同
     */
    @Override
    public boolean equals(Object obj) {
        return super.equals(obj);
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    /**
     * getClass().getName() + "@" + Integer.toHexString(hashCode());
     * 类名 + @ +此地址的hashCode
     * 可以重写
     */
    @Override
    public String toString() {
        return super.toString();
    }

    /**
     * 此方法调用的时机是：当GC要回收次对象时，调用此方法
     * 子类重写此方法，可以在释放对象前进行"某些操作"
     * finalize() 可能导致内部出现循环引用，导致此对象不能被回收
     *
     * @throws Throwable
     */
    @Override
    protected void finalize() throws Throwable {
//        super.finalize();
        System.out.println(this.getClass() + "被释放了");
    }
}
